package com.leinao.file.service;

import com.leinao.commons.Response;
import com.leinao.file.dto.FilePageDto;
import com.leinao.file.dto.FileUploadDto;
import com.leinao.file.dto.MultipartFileParam;
import com.leinao.file.model.FileResource;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;

/**
 *
 * @Description 文件处理中心
 * @author lizi
 * @date 2018/10/16 上午10:36
 * @Version 1.0
 */
public interface FileService {

	 /**
	  * @Description 获取文件列表
	  * @param userId 用户userId
	  * @param type : 文件删除根目录类型-com.leinao.constant.PathTypeEnum
	  * @param dir 目录
	  * @param pageNumber 当前页
	  * @param pageSize 每业条数
	  * @return
	  * @author suqiliang
	  * @Date 2018年7月2日 上午11:28:35
	  */
	 Response<FilePageDto> getFileList(String userId, Integer type, String dir, Integer pageNumber, Integer pageSize);

	 /**
	  * @Description 新建文件夹
	  * @param userId 用户userId
	  * @param type : 文件删除根目录类型-com.leinao.constant.PathTypeEnum
	  * @param dir 目录
	  * @return
	  * @author suqiliang
	  * @Date 2018年7月2日 上午11:28:49
	  */
	 Response<Void> addDir(String userId, Integer type, String dir);

     /**
      * @Description 删除文件
      * @param userId 用户userId
      * @param type : 文件删除根目录类型-com.leinao.constant.PathTypeEnum
      * @param dirs 目录
      * @return
      * @author suqiliang
      * @Date 2018年7月2日 上午11:28:58
      */
	 Response<Void> deleteFile(String userId, Integer type, String[] dirs);

     /**
      * @Description 文件重命名
      * @param userId 用户userId
      * @param type : 文件删除根目录类型-com.leinao.constant.PathTypeEnum
      * @param dir 旧目录名称
      * @param newDir 新目录名称
      * @return
      * @author suqiliang
      * @Date 2018年7月2日 上午11:29:05
      */
	 Response<Void> renameFile(String userId, Integer type, String dir, String newDir);

     /**
      * @Description 文件复制
      * @param userId 用户userId
      * @param type : 文件删除根目录类型-com.leinao.constant.PathTypeEnum
      * @param dirs 旧目录名称
      * @return
      * @author  suqiliang
      * @Date    2018年7月2日  上午11:31:22
      */
	 Response<Void> copyFile(String userId, Integer type, String[] dirs);

     /**
      * @Description 插入用户下载文件的带宽
      * @param userId : 用户userId
      * @param bandWidth : 带宽
      * @author sofa
      * @date 2018/10/16 下午3:49
      */
	 int insertUserDownBandWidth(String userId, BigDecimal bandWidth);

     /**
      * @Description 插入用户任务下载文件的带宽
      * @param userId : 用户userId
      * @param bandWidth : 带宽
      * @author sofa
      * @date 2018/10/16 下午3:49
      */
	 int insertUserJobBandwidth(String userId, BigDecimal bandWidth);

	/**
	 * @Description 上传文件或文件夹
	 * @param fileUploadDto  文件上传对象
	 * @author lizi
	 * @date 2018/11/6 下午12:39
	 */
	 Response<Void> upload(FileUploadDto fileUploadDto);

	 /**
      * @Description 上传文件方法2,处理文件分块，基于MappedByteBuffer来实现文件的保存
      * @param param 大文件上传参数
      * @author sofa
      * @date 2018/10/16 下午3:49
      */
	 Response<Void> uploadFileByMappedByteBuffer(MultipartFileParam param);

     /**
      * @Description 文件上传七牛云
      * @param file : 文件流
      * @author lizi
      * @date 2018/11/16 下午4:03
      */
     Response<FileResource> qiniuFileUpload(MultipartFile file);

 	 /**
 	  * @Description 文件下载 支持批量下载
 	  * @param userId : 用户ID
 	  * @param type : 文件删除根目录类型-com.leinao.constant.PathTypeEnum
 	  * @param dirs : 下载路径
 	  * @param response response对象
 	  * @author lizi
 	  * @date 2018/11/19 下午9:07
 	  */
	 void downLoad(String userId, Integer type, String[] dirs, HttpServletResponse response);

	 /***
	  * @Description 文件预览
      * @param userId : 用户ID
      * @param type : 文件删除根目录类型-com.leinao.constant.PathTypeEnum
      * @param filePath : 文件路径
      * @param response response对象
      * @author lizi
      * @date 2018/11/29 下午3:57
      */
	 void previewFile(String userId, Integer type, String filePath, HttpServletResponse response);

	/**
	 * @Description 文件预览
	 * @param path : 文件完整路径
	 * @author lizi
	 * @date 2018/12/18 下午6:43
	 */
	void previewFile(String path, HttpServletResponse response);
}
